package com.spring.demo.cglibproxy;

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * @version 1.0.0
 * @Date: 2022/5/30 16:34
 * @Author ZhuYouBin
 * @Description
 */
/** 代理对象增强逻辑 */
public class CustomInterceptor implements MethodInterceptor {

    /** 在这个方法里面, 对目标对象进行功能增强 */
    @Override
    public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        // object: 目标对象
        // method: 目标对象方法
        // args: 目标方法的参数
        // methodProxy: cglib生成的代理对象
        System.out.println("CustomInterceptor: 通过CGLIB动态代理调用目标对象......");
        // 通过 cglib 生成的代理对象去调用目标对象方法
        Object ret = methodProxy.invokeSuper(object, args);
        System.out.println("CustomInterceptor: 通过CGLIB动态代理调用目标对象结束......");
        // 返回方法返回值
        return ret;
    }

}
